package algocity.modelo.entidad;

import algocity.modelo.Posicion;

public abstract class Hectarea implements Superficie {

	protected Territorio territorio;
	protected String tipo;
	protected Construccion construccion;
	protected boolean ocupado;
	protected PaqueteDeServicios serviciosInstalados;
	protected Posicion posicion;
	
	protected Hectarea(){
		this.serviciosInstalados = new PaqueteDeServicios();
		this.ocupado = false;
	}
	
	public Posicion getPosicion() {
		return posicion;
	}

	public String getDescripcion() {
		return tipo;
	}
	
	public void agregarConstruccion(Construccion unaConstruccion){
		if (!ocupado && unaConstruccion.getServiciosNecesarios().incluidoEn(serviciosInstalados)) {
			this.construccion = unaConstruccion;
			this.ocupado = unaConstruccion.ocupacionTotal();
			unaConstruccion.agregarse(this);
		}
		
	}
	
	public Construccion getConstruccion(){
		return this.construccion;
	}
	
	public boolean ocupado(){
		return this.ocupado;
	}
	
	public void agregarse(Territorio territorio, Posicion unaPosicion){
		this.territorio = territorio;
		this.posicion = unaPosicion;
	}
	
	public void agregarServicio(Servicio unServicio){
		this.serviciosInstalados.agregarServicio(unServicio);
	}

	public boolean contieneServicio(Servicio unServicio){
		return serviciosInstalados.contiene(unServicio);
	}
	
	public void distribuirServicio(){
		Zona unaZona = territorio.getZona(construccion.getRango(),posicion);
		unaZona.agregarServicio(construccion.getServicioBrindado());
	}

	public void usarServicio(Servicio servicio) {
		serviciosInstalados.consumir(servicio);
	}
}
